function add(a, b, c, d) {
    return a + b + c + d;
}

// 三个参数每次给一个？
// var ret = add(1)(2)(3);
// var ret1 = add(1, 2, 3);
// console.log(ret);
// console.log(ret1);

// 颗粒化
/**
 * @param {function} fn
 * @return function
 */
function curry(fn) {
    // let a=1;
    // 慢慢收集拿到的参数
    // fn 等在闭包空间里的永生变量，在被闭包函数声明时已经存在了
    // let arr = [];
    let judge = (...args) => {
        // 可以访问 fn
        // arr.push(args)
        if (args.length == fn.length) return fn(...args)
        return (...arg) => judge(...args, ...arg)
    }
    return judge;
}

// console.log(add.length); // 4
var addCurry = curry(add);
console.log(addCurry(4)(22)(0)(4));// 一次接受一个参数 直到参数数量达到要求 返回函数
